package com.wsg.dep.seq;

import com.wsg.dep.util.Utils;

import java.util.Arrays;


/**
 * 将一组 Sequence对象封装起来，对外呈现为一个单一的Sequence。
 * 只能用来定义一组序列，并且从序列中获取最小的序列
 */
public final class FixedSequenceGroup extends Sequence
{
    /**
     * 一组序列
     */
    private final Sequence[] sequences;

    /**
     * 构造器
     * 使用 Arrays.copyOf 方法创建传入数组的副本，这样可以避免外部对原数组的修改影响到 FixedSequenceGroup 内部的数组。
     * @param sequences
     */
    public FixedSequenceGroup(Sequence[] sequences)
    {
        this.sequences = Arrays.copyOf(sequences, sequences.length);
    }

    /**
     * 获取当前组内的最小序列
     * @return 当前组内的最小序列
     */
    @Override
    public long get()
    {
        return Utils.getMinimumSequence(sequences);
    }

    /**
     * 数组形式返回
     * @return
     */
    @Override
    public String toString()
    {
        return Arrays.toString(sequences);
    }

    /**
     * 不支持
     */
    @Override
    public void set(long value)
    {
        throw new UnsupportedOperationException();
    }

    /**
     * 不支持
     */
    @Override
    public boolean compareAndSet(long expectedValue, long newValue)
    {
        throw new UnsupportedOperationException();
    }

    /**
     * 不支持
     */
    @Override
    public long incrementAndGet()
    {
        throw new UnsupportedOperationException();
    }

    /**
     * 不支持
     */
    @Override
    public long addAndGet(long increment)
    {
        throw new UnsupportedOperationException();
    }
}
